package com.lyz.util;

import java.text.ParseException;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class BaseTypeUtil {
	
	private static final long Day = 1000*60*60*24;
	
	public static long getTime(String time, String format){
		Date date = null;
		try {
			date = new SimpleDateFormat(format).parse(time);
			return date.getTime();
			
		} catch (ParseException e) {
			return -1;
		}
		
	}
	
	/**
	 * 返回一个时间，如果解析失败，返回当前时间
	 * @param time
	 * @param format
	 * @return
	 */
	public static Date getDate(String time, String format){
		Date date = null;
		
		try {
			date = new SimpleDateFormat(format,Locale.ENGLISH).parse(time);
		} catch (Exception e) {
			e.printStackTrace();
			return new Date();
		}
		
		return date;
	}
	
	public static String getStrDateTime(long time, String format){
		
		String date = null;
		
		if(time<0 || format==null){
			return null;
		}
		
		
		try {
			date = new SimpleDateFormat(format,Locale.ENGLISH).format(new Date(time));
		} catch (Exception e) {
			return null;
		}
		
		return date;
	}
	/**
	 * 判断一个字符串是否能够转换成整型值
	 * @param sInt
	 * @return
	 */
	public static boolean isInteger(String sInt){
		
		if(sInt==null || "".equals(sInt.trim())){
			return false;
		}
		
		try {
			Integer.parseInt(sInt.trim());
		} catch (NumberFormatException e) {
			return false;
		}
		
		return true;
	}
	
	public static double getDouble(String doubleVal, double defaultVal){
		
		if(doubleVal==null || "".equals(doubleVal)){
			return defaultVal;
		}
		
		try {
			return Double.parseDouble(doubleVal);
		} catch (NumberFormatException e) {
			return defaultVal;
		}
	}
	
	/**
	 * 获取在起始字符串和结束字符串之间的字符串
	 * @param line 原始字符串
	 * @param startStr
	 * @param endStr
	 * @return 返回字符串，没有返回null
	 */ 
	public static String getSubString(String line, String startStr, String endStr){
		
		if(line == null || startStr==null || endStr==null){
			return null;
		}
		
		int length = startStr.length();
		int start = line.indexOf(startStr)+length;
		int end = line.lastIndexOf(endStr,line.length());
		
		if(end<start){
			return null;
		}
		return line.substring(start,end);
		
	}
	
	/**
	 * 获取正整数值
	 * @param intVal
	 * @return 出现错误，返回-1
	 */
	public static int getInteger(String intVal){
		try {
			return Integer.parseInt(intVal);
		} catch (NumberFormatException e) {
			return -1;
		}
	}
	/**
	 * 获取整形值
	 * @param intVal
	 * @param defaultValue
	 * @return
	 */
	public static int getInteger(String intVal, int defaultValue){
		try {
			return Integer.parseInt(intVal);
		} catch (NumberFormatException e) {
			return defaultValue;
		}
	}
	
	public static long getLong(String longVal, long defaultValue){
		if(longVal == null){
			return defaultValue;
		}
		try {
			return Long.parseLong(longVal);
		} catch (NumberFormatException e) {
			return defaultValue;
		}
	}
	
	/**
	 * 获取毫秒时间
	 * @param time 以d(ay) h(our) m(inute) s(econd)结尾的时间表示方式，如1h表示一小时 
	 * @return 出现错误返回-1
	 */
	public static long getMiliSeconds(String time){
		long interval = 0;
		interval = getInteger(time.substring(0, time.length()-1));
		if(interval < 0){
			return -1;
		}
		if(time.endsWith("d")){
			return interval*24*60*60*1000;
		}else if(time.endsWith("h")){
			return interval*60*60*1000;
		}else if(time.endsWith("m")){
			return interval*60*1000;
		}else if(time.endsWith("s")){
			return interval*1000;
		}
		
		return -1;
	}

	
	
	/**
	 * 计算时间，对于时间格式中不全的数据进行不全，比如HH_mm需要不全年月日，默认当前
	 * @param dateFormat
	 * @param formatedDateTime
	 * @return
	 */
	public static long getFormatTime(String dateFormat, String formatedDateTime){
		
		if(dateFormat==null || "".equals(dateFormat.trim())){
			return new Date().getTime();
		}
		
		StringBuilder finalDateFormat = new StringBuilder();
		if(!dateFormat.contains("y")){
			finalDateFormat.append("yyyy-");
		}
		if(!dateFormat.contains("M")){
			finalDateFormat.append("MM-");
		}
		if(!dateFormat.contains("d")){
			finalDateFormat.append("dd ");
		}
		/*如果没有补全，则获取当前时间*/
		StringBuilder currentTime = new StringBuilder();
		long now = System.currentTimeMillis();
		if(finalDateFormat.length() > 0){
			currentTime.append(BaseTypeUtil.getStrDateTime(now, finalDateFormat.toString()));			
		}
		/*补全时间*/
		finalDateFormat.append(dateFormat);
		currentTime.append(formatedDateTime);
		/*获取时间*/
		long time =  BaseTypeUtil.getDate(currentTime.toString(), finalDateFormat.toString()).getTime();
		/*如果拼装的时间比当前时间大，说明不是当天的文件，则返回前一天的时间*/
		if(time > now){
			time = time - Day;
		}
		
		return time;
	}
	
	public static void main(String args[]){
		System.out.println(BaseTypeUtil.getSubString("log.20_55", "log.", ""));
//		System.out.println(BaseTypeUtil.md5("a"));
	}
	

}
